home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / swapserv.i < prev    next >
Text File  |  1997-10-26  |  5KB  |  255 lines

  1. IMPLEMENTATION MODULE SwapServer;
  2.  
  3. (*
  4. 20.10.88 Assembler - MODULE fr TDI-Modula-2
  5. 18.05.91 Umstellung auf Megamax
  6. JGS
  7. *)
  8.  
  9. (*$L-,R-,S-,Z-*) (* Die Stackverschieberei lassen wir mal sein.. :-) *)
  10.  
  11. FROM SYSTEM     IMPORT LONGWORD, WORD, BYTE, ASSEMBLER;
  12.  
  13. PROCEDURE SplitLongToWord(L : LONGWORD;VAR W1,W2 : WORD);
  14. BEGIN
  15.   ASSEMBLER
  16.     MOVE.L      -(A3),A0        ;ADR(W1)
  17.     MOVE.L      -(A3),A1        ;ADR(W2)
  18.     MOVE.L      -(A3),D0
  19.     MOVE.W      D0,(A0)         ;Low-Word von L nach W1
  20.     SWAP.W      D0
  21.     MOVE.W      D0,(A1)         ;High-Word von L nach W2
  22.   END;
  23. END SplitLongToWord;
  24.  
  25. PROCEDURE SplitLongToByte(L : LONGWORD;VAR B1,B2,B3,B4 : BYTE);
  26. BEGIN
  27.   ASSEMBLER
  28.     MOVE.L      B4(A3),A0       ;ADR(B4)
  29.     MOVE.B      L+3(A3),(A0)
  30.     MOVE.L      B3(A3),A0       ;ADR(B3)
  31.     MOVE.B      L+2(A3),(A0)
  32.     MOVE.L      B2(A3),A0       ;ADR(B2)
  33.     MOVE.B      L+1(A3),(A0)
  34.     MOVE.L      B1(A3),A0       ;ADR(B1)
  35.     MOVE.B      L(A3),(A0)
  36.     LEA         -20(A3),A3
  37.   END
  38. END SplitLongToByte;
  39.  
  40. PROCEDURE SplitWordToByte(W : WORD;VAR B1,B2 : BYTE);
  41. BEGIN
  42.   ASSEMBLER
  43.     MOVE.L      B2(A3),A0       ;ADR(B1)
  44.     MOVE.B      W+1(A3),(A0)
  45.     MOVE.L      B1(A3),A0       ;ADR(B2)
  46.     MOVE.B      W(A3),(A0)
  47.     LEA         -10(A3),A3
  48.   END
  49. END SplitWordToByte;
  50.  
  51. PROCEDURE SwapLong(L : LONGWORD):LONGCARD;
  52. BEGIN
  53.   ASSEMBLER
  54.     MOVE.L      -(A3),D0
  55.     SWAP.W      D0
  56.     MOVE.L      D0,(A3)+
  57.   END
  58. END SwapLong;
  59.  
  60. PROCEDURE SwapLong8086(L : LONGWORD):LONGCARD;
  61. BEGIN
  62.   ASSEMBLER
  63.     MOVE.L      -(A3),D0
  64.     ROL.W       #8,D0
  65.     SWAP.W      D0
  66.     ROL.W       #8,D0
  67.     MOVE.L      D0,(A3)+
  68.   END
  69. END SwapLong8086;
  70.  
  71. PROCEDURE SwapWord(W : WORD):CARDINAL;
  72. BEGIN
  73.   ASSEMBLER
  74.     MOVE.W      -(A3),D0
  75.     ROL.W       #8,D0
  76.     MOVE.W      D0,(A3)+
  77.   END
  78. END SwapWord;
  79.  
  80. PROCEDURE Compose4Bytes(B1,B2,B3,B4 : BYTE):LONGCARD;
  81. BEGIN
  82.   ASSEMBLER
  83.     MOVEQ.L     #0,D0
  84.     MOVEQ.L     #0,D1
  85.     MOVEQ.L     #0,D2
  86.     MOVE.L      -(A3),D0
  87.     ANDI.L      #$FF00FF00,D0
  88.     MOVE.L      -(A3),D1
  89.     ANDI.L      #$FF00FF00,D1
  90.  
  91.     MOVE.W      D1,D2
  92.     ROR.W       #8,D2
  93.     SWAP.W      D2
  94.     ADD.L       D2,D1
  95.  
  96.     MOVE.W      D0,D2
  97.     ROR.W       #8,D2
  98.  
  99.     SWAP.W      D0
  100.     MOVE.W      D0,D1
  101.     ADD.W       D2,D1
  102.  
  103.     MOVE.L      D1,(A3)+
  104.   END
  105. END Compose4Bytes;
  106.  
  107. PROCEDURE Compose2Bytes(B1,B2 : BYTE):CARDINAL;
  108. BEGIN
  109.   ASSEMBLER
  110.     MOVE.W      -(A3),D0
  111.     MOVE.W      -(A3),D1
  112.     ANDI.W      #$FF00,D0
  113.     ANDI.W      #$FF00,D1;
  114.     ROR.W       #8,D0
  115.     ADD.W       D0,D1
  116.     MOVE.W      D1,(A3)+
  117.   END
  118. END Compose2Bytes;
  119.  
  120. PROCEDURE ComposeWords(W1,W2 : WORD):LONGCARD;
  121. BEGIN
  122.   ASSEMBLER
  123.     MOVE.W      -(A3),D0
  124.     MOVE.W      -(A3),D1
  125.     SWAP.W      D1
  126.     MOVE.W      D0,D1
  127.     MOVE.L      D1,(A3)+
  128.   END
  129. END ComposeWords;
  130.  
  131. PROCEDURE BiggerByte(B1,B2 : BYTE):CHAR;
  132. BEGIN
  133.   ASSEMBLER
  134.   END
  135. END BiggerByte;
  136.  
  137. PROCEDURE BiggerCard(C1,C2 : CARDINAL):CARDINAL;
  138. BEGIN
  139.   ASSEMBLER
  140.     MOVE.W      -(A3),D0
  141.     MOVE.W      -(A3),D1
  142.     CMP.W       D0,D1
  143.     BHI.S       D1GreaterD0
  144.     MOVE.W      D0,D1
  145. D1GreaterD0:
  146.     MOVE.W      D1,(A3)+
  147.   END
  148. END BiggerCard;
  149.   
  150. PROCEDURE BiggerInt(I1, I2 : INTEGER):INTEGER;
  151. BEGIN
  152.   ASSEMBLER
  153.     MOVE.W      -(A3),D0
  154.     MOVE.W      -(A3),D1
  155.     CMP.W       D0,D1
  156.     BGT.S       D1GreaterD0
  157.     MOVE.W      D0,D1
  158. D1GreaterD0:
  159.     MOVE.W      D1,(A3)+
  160.   END
  161. END BiggerInt;
  162.  
  163. PROCEDURE BiggerLong(L1,L2 : LONGWORD):LONGCARD;
  164. BEGIN
  165.   ASSEMBLER
  166.     MOVE.L      -(A3),D0
  167.     MOVE.L      -(A3),D1
  168.     CMP.L       D0,D1
  169.     BHI.S       D1GreaterD0
  170.     MOVE.L      D0,D1
  171. D1GreaterD0:
  172.     MOVE.L      D1,(A3)+
  173.   END
  174. END BiggerLong;
  175.   
  176. PROCEDURE SmallerByte(B1,B2 : BYTE):CHAR;
  177. BEGIN
  178.   ASSEMBLER
  179.   END
  180. END SmallerByte;
  181.  
  182. PROCEDURE SmallerCard(C1,C2 : CARDINAL):CARDINAL;
  183. BEGIN
  184.   ASSEMBLER
  185.     MOVE.W      -(A3),D0
  186.     MOVE.W      -(A3),D1
  187.     CMP.W       D0,D1
  188.     BHI.S       D0GreaterD1
  189.     MOVE.W      D1,D0
  190. D0GreaterD1:
  191.     MOVE.W      D0,(A3)+
  192.   END
  193. END SmallerCard;
  194.   
  195. PROCEDURE SmallerInt(I1, I2 : INTEGER):INTEGER;
  196. BEGIN
  197.   ASSEMBLER
  198.     MOVE.W      -(A3),D0
  199.     MOVE.W      -(A3),D1
  200.     CMP.W       D0,D1
  201.     BGT.S       D0GreaterD1
  202.     MOVE.W      D1,D0
  203. D0GreaterD1:
  204.     MOVE.W      D0,(A3)+
  205.   END
  206. END SmallerInt;
  207.   
  208. PROCEDURE SmallerLong(L1,L2 : LONGWORD):LONGCARD;
  209. BEGIN
  210.   ASSEMBLER
  211.     MOVE.L      -(A3),D0
  212.     MOVE.L      -(A3),D1
  213.     CMP.L       D0,D1
  214.     BHI.S       D0GreaterD1
  215.     MOVE.L      D1,D0
  216. D0GreaterD1:
  217.     MOVE.L      D0,(A3)+
  218.   END
  219. END SmallerLong;
  220.  
  221. PROCEDURE ExchangeByte(VAR B1,B2 : BYTE);
  222. BEGIN
  223.   ASSEMBLER
  224.     MOVE.L      -(A3),A0
  225.     MOVE.L      -(A3),A1
  226.     MOVE.B      (A0),D0
  227.     MOVE.B      (A1),(A0)
  228.     MOVE.B      D0,(A1)
  229.   END
  230. END ExchangeByte;
  231.   
  232. PROCEDURE ExchangeWord(VAR W1,W2 : WORD);
  233. BEGIN
  234.   ASSEMBLER
  235.     MOVE.L      -(A3),A0
  236.     MOVE.L      -(A3),A1
  237.     MOVE.W      (A0),D0
  238.     MOVE.W      (A1),(A0)
  239.     MOVE.W      D0,(A1)
  240.   END
  241. END ExchangeWord;
  242.   
  243. PROCEDURE ExchangeLong(VAR L1,L2 : LONGWORD);
  244. BEGIN
  245.   ASSEMBLER
  246.     MOVE.L      -(A3),A0
  247.     MOVE.L      -(A3),A1
  248.     MOVE.L      (A0),D0
  249.     MOVE.L      (A1),(A0)
  250.     MOVE.L      D0,(A1)
  251.   END
  252. END ExchangeLong;
  253.  
  254. END SwapServer.
  255.